﻿// C. awoo's Favorite Problem.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1697/C

给您两个字符串 s 和 t，长度都是 n。两个字符串中的每个字符都是 “a”、“b ”或 “c”。

在一次移动中，您可以执行以下操作之一：

选择 s 中出现的 “ab”，并用 “ba ”替换；
选择 s 中出现的 “bc”，并将其替换为 “cb”。
您可以执行任意数量的移动（可能是零）。您能改变字符串 s 使其等于字符串 t 吗？

输入
第一行包含一个整数 q（1≤q≤104）--测试用例数。

每个测试用例的第一行包含一个整数 n（1≤n≤105）-- 字符串 s 和 t 的长度。
.

第二行包含长度为 n 的字符串 s，每个字符为 “a”、“b ”或 “c”。

第三行包含长度为 n 的字符串 t，每个字符为 “a”、“b ”或 “c”。

所有测试用例的 n 之和不超过 105。

输出
对于每个测试用例，如果能改变字符串 s 使其等于字符串 t 的字符串相等，则打印 “是”。否则，打印 “否”。

InputCopy
5
3
cab
cab
1
a
b
6
abbabc
bbaacb
10
bcaabababc
cbbababaac
2
ba
ab
OutputCopy
YES
NO
YES
YES
NO


5
10
bcaabababc
cbbababaac

下面是a 上面是a ok  上面是b 错误 ; 上面是c 错误
下面是b 上面是a  可在后继是b 找一次;  是b ok  是c
下面是c 上面是a错误  上面是b 无限找
*/
#include <iostream>
#include <string>


using namespace std;

int T;

void solve() {
	string a, b;
	int n;
	cin >> n;
	cin >> a >> b;

	for (int i = 0; i < n; i++) {
		if (b[i] == 'a') {
			if (a[i] == 'b') {
				cout << "NO" << endl;
				return;
			}
			else if (a[i] == 'c') {
				cout << "NO" << endl;
				return;
			}
		}
		else if (b[i] == 'b') {
			if (a[i] == 'a') {
				int j = i;
				while (j < n && a[j] == 'a') j++;
				if (j < n && a[j] == 'b') {
					swap(a[i], a[j]);
				}
				else {
					cout << "NO" << endl;
					return;
				}
			}
			else if (a[i] == 'c') {
				cout << "NO" << endl;
				return;
			}

		}
		else if (b[i] == 'c') {
			if (a[i] == 'a') {
				cout << "NO" << endl;
				return;
			}
			else if (a[i] == 'b') {
				int j = i;
				while (j<n&&a[j] == 'b') j++;
				if (j < n && a[j] == 'c') {
					swap(a[i], a[j]);
				}
				else {
					cout << "NO" << endl;
					return;
				}
			}
		}
	}

	cout << "YES" << endl;
	return;
}

int main()
{
	cin >> T;
	while (T--) {
		solve();
	}


	return 0;
}

 